A virtualized cluster is a cluster of different storage nodes that together expose a single storage device. Input/output (I/O) operations sent to the cluster are internally re-routed to read and write data to the appropriate locations. In this regard, a virtualized cluster of storage nodes can be considered analogous to a collection of disks in a Redundant Array of Inexpensive Disks (RAID) configuration, since a virtualized cluster hides the internal details of the cluster's operation from initiators and presents a unified device instead.
A virtualized cluster can be structured as one or more containers, where a container is a group of logical drives operating together. Each logical drive can be a group of disks that form a RAID. Within a container, a combination of less expensive, slower drives and more expensive, faster drives is often used together to achieve a desired mix of performance and price. Such a homogeneous container consists, therefore, of a plurality of sets of logical disks, each set having different cost and performance parameters. These sets can be referred to as the tiers of the container. That is, the set of logical drives within a container may be partitioned into tiers and a given tier may include multiple logical drives.
As additional drives are added to a storage system, the new drives can be used to expand an existing RAID or a new RAID can form a new logical drive which can then be added to a tier of the container. Generally, the approach of forming a new logic drive is used to avoid the generally lengthy re-striping that occurs when a RAID is expanded. However, the addition of a new logical drive to a container still requires data to be migrated into the new logical drive.
Another reason for adding a new logical drive to a container is the due to RAID controller designs that limit the number of disks that can be added to one logical drive. Also, some RAID cards may have restrictions on creating arrays across multiple enclosures. If a storage system contains multiple enclosures or Just a Bunch of Disk (JBOD) arrays, it may become necessary to have independent logical drives for each RAID, enclosure, or JBOD array.
Yet another reason for multiple logical drives within a tier of a container is due to a substantial spread in speeds and cost of physical drives available. It is conceivable that different logical drives may have different RAID levels but may still fall in the same tier. For example, a RAID-10 array with 7500 RPM SATA drives and a RAID-50 array with 10000 RPM SATA drives may be allocated to a common tier within a container.
Whatever the reason for having multiple logical drives within a single tier, stored data must be allocated within the tier by efficiently dividing the data between the logical drives within the tier. Determining how the data stored in the container should best be distributed among the various logical drives of each container tier presents an interesting challenge.
It is with respect to these considerations and others that the disclosure made herein is presented.